Introduction

Build Website Website Website Website

Packages & Data

Packages

This document was prepared on 2021-10-14.

library(tidyverse)
library(patchwork)
library(glmmTMB)
library(report)
library(parameters)
library(modelbased)
library(performance)
library(bayestestR)
library(see)

summary(report::report(sessionInfo()))

The analysis was done using the R Statistical language (v4.1.0; R Core Team, 2021) on Windows 10 x64, using the packages ggplot2 (v3.3.5), stringr (v1.4.0), forcats (v0.5.1), tidyr (v1.1.3), readr (v1.4.0), dplyr (v1.0.6), tibble (v3.1.2), purrr (v0.3.4), parameters (v0.14.0.2), performance (v0.7.3.1), see (v0.6.7), modelbased (v0.9.0), bayestestR (v0.10.5), report (v0.3.5), glmmTMB (v1.1.2.3), patchwork (v1.1.1) and tidyverse (v1.3.1).

Data

df <- read.csv("data/data_combined.csv") %>% 
  mutate(ID = as.factor(ID),
         condition = as.factor(condition),
         item = as.factor(item),
         style = as.factor(style),
         instruction = as.factor(instruction))

cat(paste("The data consists of",
          report::report_participants(df,
                                      participants = "ID",
                                      sex = "Gender",
                                      age = "Age")))

The data consists of 30 participants (Mean age = 21.1, SD = 2.1, range: [18, 25]; 63.3% females)

Note that the chunks generating figures in the code below have some arguments specified in their header, such as fig.width and fig.height, which controls the figure size. These were filled with an eponym argument defined in utils/config.R. We also set the resolution, i.e., dpi, to a low value so that the resulting file is lighter. But don’t forget to crank this value up (to 300-600) to get nice-looking results.

Descriptive Stats

Notice the {.tabset} tag after the section name. This will show the subsections as different tabs (in the html version only, because the other formats are static).

df.plot <- df %>% 
  group_by(ID, condition, instruction) %>% 
  summarise(DT_confidence = mean(DT_confidence, na.rm = TRUE),
            DT_RT = mean(DT_RT, na.rm = TRUE),
            yoni_total = mean(yoni_total, na.rm = TRUE),
            BES_total = mean(BES_total, na.rm = TRUE),
            HCT_accuracy = mean(HCT_accuracy, na.rm = TRUE),
            MAIA_total = mean(MAIA_total, na.rm = TRUE))

Questionnaires

p <- ggplot(df.plot, aes(yoni_total)) + geom_histogram()
q <- ggplot(df.plot, aes(BES_total)) + geom_histogram()
r <- ggplot(df.plot, aes(yoni_total, BES_total)) + geom_point()
s <- ggplot(df.plot, aes(HCT_accuracy)) + geom_histogram()
t <- ggplot(df.plot, aes(MAIA_total)) + geom_histogram()
u <- ggplot(df.plot, aes(HCT_accuracy, MAIA_total)) + geom_point()
(p + q + r)/(s + t + u) 

Deception Task

much higher confidence in truth no diff in reaction time in truth or lie not much diff for diff conditions

p <- ggplot(df, aes(DT_confidence)) + geom_density()
q <- ggplot(df, aes(DT_RT)) + geom_density()

r <- ggplot(df, aes(instruction, DT_confidence, fill = condition)) + geom_boxplot()
s <- ggplot(df, aes(instruction, DT_RT, fill = condition)) + geom_boxplot()

(p + q)/(r + s)

Questionnaire and Deception Task

interesting that the social tests are more correlated with polygraph and vice versa

Yoni and BES

both yoni and BES do not seem to have effect in social condition, higher yoni/BES increases confidence in truth and decreases confidences in lie

p <- ggplot(df.plot, aes(x = yoni_total, y = DT_confidence, colour = instruction)) +
  geom_point() +
  geom_smooth(method = "lm") + 
  facet_wrap(~condition)

q <- ggplot(df.plot, aes(x = BES_total, y = DT_confidence, colour = instruction)) +
  geom_point() +
  geom_smooth(method = "lm") + 
  facet_wrap(~condition)

p + q

HCT

same effect in both social and polygraph, higher HCT accuracy decreases confidence in truth and increases confidence in lie

ggplot(df.plot, aes(x = HCT_accuracy, y = DT_confidence, colour = instruction)) +
  geom_point() +
  geom_smooth(method = "lm") + 
  facet_wrap(~condition)

MAIA

same effect for lie in both social and polygraph, higher MAIA increases confidence higher MAIA increases confidence in lie for social and not polygraph

ggplot(df.plot, aes(x = MAIA_total, y = DT_confidence, colour = instruction)) +
  geom_point() +
  geom_smooth(method = "lm") + 
  facet_wrap(~condition)

Inferential Stats

The effect of confidence on RT

Confidence has a significant impact on RT.

model <- glmmTMB(DT_confidence ~ DT_RT + (1|ID) + (1|item), data = df) # removed trial
parameters(model, effects = "fixed")
Parameter Coefficient SE CI CI_low CI_high z df_error p Effects
(Intercept) 0.66 0.03 0.95 0.60 0.71 22.6 Inf 0.00 fixed
DT_RT -0.01 0.01 0.95 -0.03 0.00 -2.8 Inf 0.01 fixed
viz_data <- estimate_relation(model)
ggplot(data = viz_data, aes(x = DT_RT, y = Predicted)) +
  geom_point(data = df, aes(x = DT_RT, y = DT_confidence, color = ID), show.legend = FALSE) +
  geom_line() +
  geom_ribbon(aes(ymin = CI_low, ymax = CI_high), alpha = 0.3)

# what's the include_random thing (6.5 vs 6.7)

Interaction of condition and instruction

Confidence

There is a significant interaction of condition and instruction on confidence. The increase in confidence from lie to truth is more in polygraph than social.

model <- glmmTMB(DT_confidence ~ condition*instruction + (1|ID) + (1|item), data = df)
parameters(model, effects = "fixed")
Parameter Coefficient SE CI CI_low CI_high z df_error p Effects
(Intercept) 0.42 0.02 0.95 0.38 0.46 19.50 Inf 0.00 fixed
conditionSocial 0.01 0.02 0.95 -0.02 0.04 0.74 Inf 0.46 fixed
instructionTRUTH 0.36 0.02 0.95 0.33 0.40 22.04 Inf 0.00 fixed
conditionSocial:instructionTRUTH -0.05 0.02 0.95 -0.10 -0.01 -2.32 Inf 0.02 fixed
means <- modelbased::estimate_means(model, at = c("condition", "instruction"))
contrasts <- modelbased::estimate_contrasts(model, contrast = c("condition", "instruction"))
ggplot(means, aes(x = instruction, y = Mean, colour = condition)) + 
  geom_line(aes(group = condition)) +
  geom_pointrange(aes(ymin = CI_low, ymax= CI_high))

Reaction time

There is no significant interaction of condition and instruction on RT.

model <- glmmTMB(DT_RT ~ condition*instruction + (1|ID) + (1|item), data = df)
parameters(model, effects = "fixed")
Parameter Coefficient SE CI CI_low CI_high z df_error p Effects
(Intercept) 4.33 0.21 0.95 3.91 4.74 20.53 Inf 0.00 fixed
conditionSocial -0.41 0.07 0.95 -0.54 -0.28 -6.10 Inf 0.00 fixed
instructionTRUTH 0.08 0.07 0.95 -0.05 0.21 1.19 Inf 0.23 fixed
conditionSocial:instructionTRUTH -0.02 0.10 0.95 -0.20 0.17 -0.19 Inf 0.85 fixed
means <- modelbased::estimate_means(model, at = c("condition", "instruction"))
ggplot(means, aes(x = instruction, y = Mean, colour = condition)) + 
  geom_line(aes(group = condition)) +
  geom_pointrange(aes(ymin = CI_low, ymax= CI_high))

Interaction of style and instruction

Confidence

There is no significant interaction of style and instruction on confidence.

model <- glmmTMB(DT_confidence ~ style*instruction + (1|ID) + (1|item), data = df)
parameters(model, effects = "fixed")
Parameter Coefficient SE CI CI_low CI_high z df_error p Effects
(Intercept) 0.43 0.02 0.95 0.39 0.48 20.11 Inf 0.00 fixed
styleIndirect -0.01 0.02 0.95 -0.05 0.02 -0.90 Inf 0.37 fixed
instructionTRUTH 0.34 0.02 0.95 0.30 0.37 20.27 Inf 0.00 fixed
styleIndirect:instructionTRUTH 0.00 0.02 0.95 -0.04 0.05 0.09 Inf 0.93 fixed
means <- modelbased::estimate_means(model, at = c("style", "instruction"))
ggplot(means, aes(x = instruction, y = Mean, colour = style)) + 
  geom_line(aes(group = style)) +
  geom_pointrange(aes(ymin = CI_low, ymax= CI_high))

Reaction time

There is no significant interaction of style and instruction on RT.

model <- glmmTMB(DT_RT ~ style*instruction + (1|ID) + (1|item), data = df)
parameters(model, effects = "fixed")
Parameter Coefficient SE CI CI_low CI_high z df_error p Effects
(Intercept) 3.96 0.21 0.95 3.54 4.37 18.77 Inf 0.00 fixed
styleIndirect 0.33 0.07 0.95 0.20 0.46 4.91 Inf 0.00 fixed
instructionTRUTH 0.02 0.07 0.95 -0.11 0.15 0.28 Inf 0.78 fixed
styleIndirect:instructionTRUTH 0.10 0.10 0.95 -0.08 0.29 1.09 Inf 0.27 fixed
means <- modelbased::estimate_means(model, at = c("style", "instruction"))
ggplot(means, aes(x = instruction, y = Mean, colour = style)) + 
  geom_line(aes(group = style)) +
  geom_pointrange(aes(ymin = CI_low, ymax= CI_high))

Full Code

The full script of executive code contained in this document is reproduced here.

# Set up the environment (or use local alternative `source("utils/config.R")`)
source("https://raw.githubusercontent.com/RealityBending/TemplateResults/main/utils/config.R")  

fast <- FALSE  # Make this false to skip the chunks
# This chunk is a bit complex so don't worry about it: it's made to add badges to the HTML versions
# NOTE: You have to replace the links accordingly to have working "buttons" on the HTML versions
if (!knitr::is_latex_output() && knitr::is_html_output()) {
  cat("![Build](https://github.com/RealityBending/TemplateResults/workflows/Build/badge.svg)
      [![Website](https://img.shields.io/badge/repo-Readme-2196F3)](https://github.com/RealityBending/TemplateResults)
      [![Website](https://img.shields.io/badge/visit-website-E91E63)](https://realitybending.github.io/TemplateResults/)
      [![Website](https://img.shields.io/badge/download-.docx-FF5722)](https://github.com/RealityBending/TemplateResults/raw/main/word_and_pdf/SupplementaryMaterials.docx)
      [![Website](https://img.shields.io/badge/see-.pdf-FF9800)](https://github.com/RealityBending/TemplateResults/blob/main/word_and_pdf/SupplementaryMaterials.pdf)")
}
library(tidyverse)
library(patchwork)
library(glmmTMB)
library(report)
library(parameters)
library(modelbased)
library(performance)
library(bayestestR)
library(see)

summary(report::report(sessionInfo()))
df <- read.csv("data/data_combined.csv") %>% 
  mutate(ID = as.factor(ID),
         condition = as.factor(condition),
         item = as.factor(item),
         style = as.factor(style),
         instruction = as.factor(instruction))

cat(paste("The data consists of",
          report::report_participants(df,
                                      participants = "ID",
                                      sex = "Gender",
                                      age = "Age")))
report::cite_packages(sessionInfo())
df.plot <- df %>% 
  group_by(ID, condition, instruction) %>% 
  summarise(DT_confidence = mean(DT_confidence, na.rm = TRUE),
            DT_RT = mean(DT_RT, na.rm = TRUE),
            yoni_total = mean(yoni_total, na.rm = TRUE),
            BES_total = mean(BES_total, na.rm = TRUE),
            HCT_accuracy = mean(HCT_accuracy, na.rm = TRUE),
            MAIA_total = mean(MAIA_total, na.rm = TRUE))
p <- ggplot(df.plot, aes(yoni_total)) + geom_histogram()
q <- ggplot(df.plot, aes(BES_total)) + geom_histogram()
r <- ggplot(df.plot, aes(yoni_total, BES_total)) + geom_point()
s <- ggplot(df.plot, aes(HCT_accuracy)) + geom_histogram()
t <- ggplot(df.plot, aes(MAIA_total)) + geom_histogram()
u <- ggplot(df.plot, aes(HCT_accuracy, MAIA_total)) + geom_point()
(p + q + r)/(s + t + u) 
p <- ggplot(df, aes(DT_confidence)) + geom_density()
q <- ggplot(df, aes(DT_RT)) + geom_density()

r <- ggplot(df, aes(instruction, DT_confidence, fill = condition)) + geom_boxplot()
s <- ggplot(df, aes(instruction, DT_RT, fill = condition)) + geom_boxplot()

(p + q)/(r + s)
p <- ggplot(df.plot, aes(x = yoni_total, y = DT_confidence, colour = instruction)) +
  geom_point() +
  geom_smooth(method = "lm") + 
  facet_wrap(~condition)

q <- ggplot(df.plot, aes(x = BES_total, y = DT_confidence, colour = instruction)) +
  geom_point() +
  geom_smooth(method = "lm") + 
  facet_wrap(~condition)

p + q
ggplot(df.plot, aes(x = HCT_accuracy, y = DT_confidence, colour = instruction)) +
  geom_point() +
  geom_smooth(method = "lm") + 
  facet_wrap(~condition)
ggplot(df.plot, aes(x = MAIA_total, y = DT_confidence, colour = instruction)) +
  geom_point() +
  geom_smooth(method = "lm") + 
  facet_wrap(~condition)
model <- glmmTMB(DT_confidence ~ DT_RT + (1|ID) + (1|item), data = df) # removed trial
parameters(model, effects = "fixed")
viz_data <- estimate_relation(model)
ggplot(data = viz_data, aes(x = DT_RT, y = Predicted)) +
  geom_point(data = df, aes(x = DT_RT, y = DT_confidence, color = ID), show.legend = FALSE) +
  geom_line() +
  geom_ribbon(aes(ymin = CI_low, ymax = CI_high), alpha = 0.3)

# what's the include_random thing (6.5 vs 6.7)
model <- glmmTMB(DT_confidence ~ condition*instruction + (1|ID) + (1|item), data = df)
parameters(model, effects = "fixed")
means <- modelbased::estimate_means(model, at = c("condition", "instruction"))
contrasts <- modelbased::estimate_contrasts(model, contrast = c("condition", "instruction"))
ggplot(means, aes(x = instruction, y = Mean, colour = condition)) + 
  geom_line(aes(group = condition)) +
  geom_pointrange(aes(ymin = CI_low, ymax= CI_high))
model <- glmmTMB(DT_RT ~ condition*instruction + (1|ID) + (1|item), data = df)
parameters(model, effects = "fixed")
means <- modelbased::estimate_means(model, at = c("condition", "instruction"))
ggplot(means, aes(x = instruction, y = Mean, colour = condition)) + 
  geom_line(aes(group = condition)) +
  geom_pointrange(aes(ymin = CI_low, ymax= CI_high))
model <- glmmTMB(DT_confidence ~ style*instruction + (1|ID) + (1|item), data = df)
parameters(model, effects = "fixed")
means <- modelbased::estimate_means(model, at = c("style", "instruction"))
ggplot(means, aes(x = instruction, y = Mean, colour = style)) + 
  geom_line(aes(group = style)) +
  geom_pointrange(aes(ymin = CI_low, ymax= CI_high))
model <- glmmTMB(DT_RT ~ style*instruction + (1|ID) + (1|item), data = df)
parameters(model, effects = "fixed")
means <- modelbased::estimate_means(model, at = c("style", "instruction"))
ggplot(means, aes(x = instruction, y = Mean, colour = style)) + 
  geom_line(aes(group = style)) +
  geom_pointrange(aes(ymin = CI_low, ymax= CI_high))

Package References

report::cite_packages(sessionInfo())
  • H. Wickham. ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York, 2016.
  • Hadley Wickham (2019). stringr: Simple, Consistent Wrappers for Common String Operations. R package version 1.4.0. https://CRAN.R-project.org/package=stringr
  • Hadley Wickham (2021). forcats: Tools for Working with Categorical Variables (Factors). R package version 0.5.1. https://CRAN.R-project.org/package=forcats
  • Hadley Wickham (2021). tidyr: Tidy Messy Data. R package version 1.1.3. https://CRAN.R-project.org/package=tidyr
  • Hadley Wickham and Jim Hester (2020). readr: Read Rectangular Text Data. R package version 1.4.0. https://CRAN.R-project.org/package=readr
  • Hadley Wickham, Romain François, Lionel Henry and Kirill Müller (2021). dplyr: A Grammar of Data Manipulation. R package version 1.0.6. https://CRAN.R-project.org/package=dplyr
  • Kirill Müller and Hadley Wickham (2021). tibble: Simple Data Frames. R package version 3.1.2. https://CRAN.R-project.org/package=tibble
  • Lionel Henry and Hadley Wickham (2020). purrr: Functional Programming Tools. R package version 0.3.4. https://CRAN.R-project.org/package=purrr
  • Lüdecke D, Ben-Shachar M, Patil I, Makowski D (2020). “Extracting,Computing and Exploring the Parameters of Statistical Models using R.”Journal of Open Source Software, 5(53), 2445. doi:10.21105/joss.02445 (URL: https://doi.org/10.21105/joss.02445).
  • Lüdecke et al., (2021). performance: An R Package for Assessment, Comparison and Testing of Statistical Models. Journal of Open Source Software, 6(60), 3139. https://doi.org/10.21105/joss.03139
  • Lüdecke et al., (2021). see: An R Package for Visualizing Statistical Models. Journal of Open Source Software, 6(64), 3393. https://doi.org/10.21105/joss.03393
  • Makowski, D., Ben-Shachar, M. S., Patil, I., & Lüdecke, D. (2020). Estimation of Model-Based Predictions, Contrasts and Means. CRAN.
  • Makowski, D., Ben-Shachar, M., & Lüdecke, D. (2019). bayestestR: Describing Effects and their Uncertainty, Existence and Significance within the Bayesian Framework. Journal of Open Source Software, 4(40), 1541. doi:10.21105/joss.01541
  • Makowski, D., Ben-Shachar, M.S., Patil, I. & Lüdecke, D. (2020). Automated Results Reporting as a Practical Tool to Improve Reproducibility and Methodological Best Practices Adoption. CRAN. Available from https://github.com/easystats/report. doi: .
  • Mollie E. Brooks, Kasper Kristensen, Koen J. van Benthem, Arni Magnusson, Casper W. Berg, Anders Nielsen, Hans J. Skaug, Martin Maechler and Benjamin M. Bolker (2017). glmmTMB Balances Speed and Flexibility Among Packages for Zero-inflated Generalized Linear Mixed Modeling. The R Journal, 9(2), 378-400.
  • R Core Team (2021). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. URL https://www.R-project.org/.
  • Thomas Lin Pedersen (2020). patchwork: The Composer of Plots. R package version 1.1.1. https://CRAN.R-project.org/package=patchwork
  • Wickham et al., (2019). Welcome to the tidyverse. Journal of Open Source Software, 4(43), 1686, https://doi.org/10.21105/joss.01686

References

LS0tDQp0aXRsZTogJyoqUmVzdWx0cyBUZW1wbGF0ZSoqJw0Kc3VidGl0bGU6IEEgU3VidGl0bGUNCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0aGVtZTogY2VydWxlYW4NCiAgICBoaWdobGlnaHQ6IHB5Z21lbnRzDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDMNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogbm8NCiAgICBkZl9wcmludDoga2FibGUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgd29yZF9kb2N1bWVudDoNCiAgICByZWZlcmVuY2VfZG9jeDogdXRpbHMvVGVtcGxhdGVfV29yZC5kb2N4DQogICAgaGlnaGxpZ2h0OiBweWdtZW50cw0KICAgIHRvYzogbm8NCiAgICB0b2NfZGVwdGg6IDMNCiAgICBkZl9wcmludDoga2FibGUNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICBybWFya2Rvd246Omh0bWxfdmlnbmV0dGU6DQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDMNCiAgcGRmX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQogICAgdG9jX2RlcHRoOiAnMicNCiAgICBsYXRleF9lbmdpbmU6IHhlbGF0ZXgNCmVkaXRvcl9vcHRpb25zOg0KICBjaHVua19vdXRwdXRfdHlwZTogY29uc29sZQ0KYmlibGlvZ3JhcGh5OiB1dGlscy9iaWJsaW9ncmFwaHkuYmliDQpjc2w6IHV0aWxzL2FwYS5jc2wNCi0tLQ0KDQoNCjwhLS0gDQohISEhIElNUE9SVEFOVDogcnVuIGBzb3VyY2UoInV0aWxzL3JlbmRlci5SIilgIHRvIHB1Ymxpc2ggaW5zdGVhZCBvZiBjbGlja2luZyBvbiAnS25pdCcNCi0tPg0KDQpgYGB7ciBzZXR1cCwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1UUlVFLCBpbmNsdWRlPUZBTFNFfQ0KIyBTZXQgdXAgdGhlIGVudmlyb25tZW50IChvciB1c2UgbG9jYWwgYWx0ZXJuYXRpdmUgYHNvdXJjZSgidXRpbHMvY29uZmlnLlIiKWApDQpzb3VyY2UoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9SZWFsaXR5QmVuZGluZy9UZW1wbGF0ZVJlc3VsdHMvbWFpbi91dGlscy9jb25maWcuUiIpICANCg0KZmFzdCA8LSBGQUxTRSAgIyBNYWtlIHRoaXMgZmFsc2UgdG8gc2tpcCB0aGUgY2h1bmtzDQpgYGANCg0KIyBJbnRyb2R1Y3Rpb24NCg0KYGBge3IgYmFkZ2VzLCBlY2hvPUZBTFNFLCBtZXNzYWdlPVRSVUUsIHdhcm5pbmc9RkFMU0UsIHJlc3VsdHM9J2FzaXMnfQ0KIyBUaGlzIGNodW5rIGlzIGEgYml0IGNvbXBsZXggc28gZG9uJ3Qgd29ycnkgYWJvdXQgaXQ6IGl0J3MgbWFkZSB0byBhZGQgYmFkZ2VzIHRvIHRoZSBIVE1MIHZlcnNpb25zDQojIE5PVEU6IFlvdSBoYXZlIHRvIHJlcGxhY2UgdGhlIGxpbmtzIGFjY29yZGluZ2x5IHRvIGhhdmUgd29ya2luZyAiYnV0dG9ucyIgb24gdGhlIEhUTUwgdmVyc2lvbnMNCmlmICgha25pdHI6OmlzX2xhdGV4X291dHB1dCgpICYmIGtuaXRyOjppc19odG1sX291dHB1dCgpKSB7DQogIGNhdCgiIVtCdWlsZF0oaHR0cHM6Ly9naXRodWIuY29tL1JlYWxpdHlCZW5kaW5nL1RlbXBsYXRlUmVzdWx0cy93b3JrZmxvd3MvQnVpbGQvYmFkZ2Uuc3ZnKQ0KICAgICAgWyFbV2Vic2l0ZV0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9iYWRnZS9yZXBvLVJlYWRtZS0yMTk2RjMpXShodHRwczovL2dpdGh1Yi5jb20vUmVhbGl0eUJlbmRpbmcvVGVtcGxhdGVSZXN1bHRzKQ0KICAgICAgWyFbV2Vic2l0ZV0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9iYWRnZS92aXNpdC13ZWJzaXRlLUU5MUU2MyldKGh0dHBzOi8vcmVhbGl0eWJlbmRpbmcuZ2l0aHViLmlvL1RlbXBsYXRlUmVzdWx0cy8pDQogICAgICBbIVtXZWJzaXRlXShodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL2Rvd25sb2FkLS5kb2N4LUZGNTcyMildKGh0dHBzOi8vZ2l0aHViLmNvbS9SZWFsaXR5QmVuZGluZy9UZW1wbGF0ZVJlc3VsdHMvcmF3L21haW4vd29yZF9hbmRfcGRmL1N1cHBsZW1lbnRhcnlNYXRlcmlhbHMuZG9jeCkNCiAgICAgIFshW1dlYnNpdGVdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2Uvc2VlLS5wZGYtRkY5ODAwKV0oaHR0cHM6Ly9naXRodWIuY29tL1JlYWxpdHlCZW5kaW5nL1RlbXBsYXRlUmVzdWx0cy9ibG9iL21haW4vd29yZF9hbmRfcGRmL1N1cHBsZW1lbnRhcnlNYXRlcmlhbHMucGRmKSIpDQp9DQpgYGANCg0KDQojIFBhY2thZ2VzICYgRGF0YQ0KDQojIyBQYWNrYWdlcw0KDQpUaGlzIGRvY3VtZW50IHdhcyBwcmVwYXJlZCBvbiBgciBmb3JtYXQoU3lzLkRhdGUoKSlgLiANCg0KYGBge3Igd2FybmluZz1GQUxTRSwgbWVzc2FnZT1UUlVFLCByZXN1bHRzPSdhc2lzJ30NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShwYXRjaHdvcmspDQpsaWJyYXJ5KGdsbW1UTUIpDQpsaWJyYXJ5KHJlcG9ydCkNCmxpYnJhcnkocGFyYW1ldGVycykNCmxpYnJhcnkobW9kZWxiYXNlZCkNCmxpYnJhcnkocGVyZm9ybWFuY2UpDQpsaWJyYXJ5KGJheWVzdGVzdFIpDQpsaWJyYXJ5KHNlZSkNCg0Kc3VtbWFyeShyZXBvcnQ6OnJlcG9ydChzZXNzaW9uSW5mbygpKSkNCmBgYA0KDQoNCiMjIERhdGENCg0KYGBge3Igd2FybmluZz1GQUxTRSwgbWVzc2FnZT1UUlVFLCByZXN1bHRzPSdhc2lzJ30NCmRmIDwtIHJlYWQuY3N2KCJkYXRhL2RhdGFfY29tYmluZWQuY3N2IikgJT4lIA0KICBtdXRhdGUoSUQgPSBhcy5mYWN0b3IoSUQpLA0KICAgICAgICAgY29uZGl0aW9uID0gYXMuZmFjdG9yKGNvbmRpdGlvbiksDQogICAgICAgICBpdGVtID0gYXMuZmFjdG9yKGl0ZW0pLA0KICAgICAgICAgc3R5bGUgPSBhcy5mYWN0b3Ioc3R5bGUpLA0KICAgICAgICAgaW5zdHJ1Y3Rpb24gPSBhcy5mYWN0b3IoaW5zdHJ1Y3Rpb24pKQ0KDQpjYXQocGFzdGUoIlRoZSBkYXRhIGNvbnNpc3RzIG9mIiwNCiAgICAgICAgICByZXBvcnQ6OnJlcG9ydF9wYXJ0aWNpcGFudHMoZGYsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2lwYW50cyA9ICJJRCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNleCA9ICJHZW5kZXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2UgPSAiQWdlIikpKQ0KYGBgDQoNCg0KDQpOb3RlIHRoYXQgdGhlIGNodW5rcyBnZW5lcmF0aW5nIGZpZ3VyZXMgaW4gdGhlIGNvZGUgYmVsb3cgaGF2ZSBzb21lIGFyZ3VtZW50cyBzcGVjaWZpZWQgaW4gdGhlaXIgaGVhZGVyLCBzdWNoIGFzIGBmaWcud2lkdGhgIGFuZCBgZmlnLmhlaWdodGAsIHdoaWNoIGNvbnRyb2xzIHRoZSBmaWd1cmUgc2l6ZS4gVGhlc2Ugd2VyZSBmaWxsZWQgd2l0aCBhbiBlcG9ueW0gYXJndW1lbnQgZGVmaW5lZCBpbiBbYHV0aWxzL2NvbmZpZy5SYF0oaHR0cHM6Ly9naXRodWIuY29tL1JlYWxpdHlCZW5kaW5nL1RlbXBsYXRlUmVzdWx0cy9ibG9iL21haW4vdXRpbHMvY29uZmlnLlIjTDI2LUwyNykuIFdlIGFsc28gc2V0IHRoZSByZXNvbHV0aW9uLCBpLmUuLCBgZHBpYCwgdG8gYSBsb3cgdmFsdWUgc28gdGhhdCB0aGUgcmVzdWx0aW5nIGZpbGUgaXMgbGlnaHRlci4gQnV0ICoqZG9uJ3QgZm9yZ2V0IHRvIGNyYW5rIHRoaXMgdmFsdWUgdXAqKiAodG8gMzAwLTYwMCkgdG8gZ2V0IG5pY2UtbG9va2luZyByZXN1bHRzLg0KDQoNCiMgRGVzY3JpcHRpdmUgU3RhdHMgey50YWJzZXR9DQoNCk5vdGljZSB0aGUgYHsudGFic2V0fWAgdGFnIGFmdGVyIHRoZSBzZWN0aW9uIG5hbWUuIFRoaXMgd2lsbCBzaG93IHRoZSBzdWJzZWN0aW9ucyBhcyBkaWZmZXJlbnQgdGFicyAoaW4gdGhlIFtodG1sIHZlcnNpb25dKGh0dHBzOi8vcmVhbGl0eWJlbmRpbmcuZ2l0aHViLmlvL1RlbXBsYXRlUmVzdWx0cy8jRGVzY3JpcHRpdmVfU3RhdHMpIG9ubHksIGJlY2F1c2UgdGhlIG90aGVyIGZvcm1hdHMgYXJlIHN0YXRpYykuDQoNCg0KYGBge3IgY2hpbGQ9aWYgKGZhc3QgPT0gRkFMU0UpICcxX2Rlc2NyaXB0aXZlLlJtZCd9DQpgYGANCg0KIyBJbmZlcmVudGlhbCBTdGF0cyB7LnRhYnNldH0NCg0KYGBge3IgY2hpbGQ9aWYgKGZhc3QgPT0gRkFMU0UpICcyX2luZmVyZW50aWFsLlJtZCd9DQpgYGANCg0KDQojIEZ1bGwgQ29kZQ0KDQpUaGUgZnVsbCBzY3JpcHQgb2YgZXhlY3V0aXZlIGNvZGUgY29udGFpbmVkIGluIHRoaXMgZG9jdW1lbnQgaXMgcmVwcm9kdWNlZCBoZXJlLg0KDQpgYGB7ciBmdWxsX2NvZGUsIHJlZi5sYWJlbD1rbml0cjo6YWxsX2xhYmVscygpLCBldmFsPUZBTFNFfQ0KYGBgDQoNCiMgUGFja2FnZSBSZWZlcmVuY2VzDQoNCmBgYHtyIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHJlc3VsdHM9J2FzaXMnfQ0KcmVwb3J0OjpjaXRlX3BhY2thZ2VzKHNlc3Npb25JbmZvKCkpDQpgYGANCg0KDQojIFJlZmVyZW5jZXMNCg==